/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package pessoas.presenter;

import pessoas.model.Contato;

/**
 *
 * @author Bush
 */
public class DeteccaoUfOperadora {

    private String[][] matrixOperadoras;

    public DeteccaoUfOperadora() {
        iniciaMatrizOperadoras();
    }

    public void iniciaMatrizOperadoras() {
        matrixOperadoras = new String[9][4];
        matrixOperadoras[0][0] = "Vivo";
        matrixOperadoras[0][1] = "Claro";
        matrixOperadoras[0][2] = "Tim";
        matrixOperadoras[0][3] = "Oi";

        matrixOperadoras[1][0] = "Vivo";
        matrixOperadoras[1][1] = "Claro";
        matrixOperadoras[1][2] = "Oi";
        matrixOperadoras[1][3] = "Tim";

        matrixOperadoras[2][0] = "Telemig";
        matrixOperadoras[2][1] = "Tim";
        matrixOperadoras[2][2] = "Oi";
        matrixOperadoras[2][3] = "Claro";

        matrixOperadoras[3][0] = "Tim";
        matrixOperadoras[3][1] = "Vivo";
        matrixOperadoras[3][2] = "Claro";
        matrixOperadoras[3][3] = "Telecom";

        matrixOperadoras[4][0] = "Vivo";
        matrixOperadoras[4][1] = "Claro";
        matrixOperadoras[4][2] = "Tim";
        matrixOperadoras[4][3] = "Telecom";

        matrixOperadoras[5][0] = "Vivo";
        matrixOperadoras[5][1] = "Claro";
        matrixOperadoras[5][2] = "Tim";
        matrixOperadoras[5][3] = "Telecom";

        matrixOperadoras[6][0] = "Vivo";
        matrixOperadoras[6][1] = "Tim";
        matrixOperadoras[6][2] = "Oi";
        matrixOperadoras[6][3] = "Claro";

        matrixOperadoras[7][0] = "Tim";
        matrixOperadoras[7][1] = "Claro";
        matrixOperadoras[7][2] = "Oi";
        matrixOperadoras[7][3] = "Vivo";

        matrixOperadoras[8][0] = "Amazonia";
        matrixOperadoras[8][1] = "Vivo";
        matrixOperadoras[8][2] = "Oi";
        matrixOperadoras[8][3] = "Tim";
    }
    
    public String detectaNonoDigito(String telefone) {
        
        int ddd = Integer.parseInt(telefone.substring(1, 3));
        String tel = telefone.substring(4, 8)+ telefone.substring(9) ;
        
        if ((ddd >= 11 && ddd <= 19) || ddd == 28 || ddd == 27 || ddd == 24 || ddd == 22 || ddd == 21) {
            if (tel.length() == 8) {
                String telAlterado = telefone.substring(0, 4) + "9" + telefone.substring(4);
                return telAlterado;
            }
        }else if(tel.length() == 9){
            String telAlterado = telefone.substring(0, 4) + telefone.substring(5);
                return telAlterado;
        }
        return telefone;
    }

    public Contato detectaUF(Contato contato) throws Exception {
        int ddd = Integer.parseInt(contato.getTelefone().substring(1, 3));
        int prefixo = Integer.parseInt(contato.getTelefone().substring(4, 6));
        String uf = "";
        String operadora = "";

        if (ddd >= 11 && ddd <= 19) {   //Detecta que o ddd é de São Paulo 
            uf = "SP";
            operadora = detectaBanda(0, prefixo);

        } else if (ddd >= 21 && ddd <= 28) {   //Detecta que o ddd é do ES ou RJ
            if (ddd == 27 || ddd == 28) {
                uf = "ES";
            } else {
                uf = "RJ";
            }
            operadora = detectaBanda(1, prefixo);

        } else if (ddd >= 31 && ddd <= 38) {   //Detecta que o ddd é de MG
            uf = "MG";
            operadora = detectaBanda(2, prefixo);

        } else if (ddd >= 41 && ddd <= 49) {   //Detecta que o ddd é de PR ou SC
            if (ddd >= 41 && ddd <= 46) {
                uf = "PR";
            } else {
                uf = "SC";
            }
            operadora = detectaBanda(3, prefixo);

        } else if (ddd >= 51 && ddd <= 55) {   //Detecta que o ddd é do RS
            uf = "RS";
            operadora = detectaBanda(4, prefixo);

        } else if (ddd >= 61 && ddd <= 69) {       //Detecta que o ddd é dá Região Centro Oeste
            uf = "Centro Oeste";
            operadora = detectaBanda(5, prefixo);

        } else if (ddd >= 71 && ddd <= 79) {   //Detecta que o ddd é da Bahia
            uf = "BA";
            operadora = detectaBanda(6, prefixo);

        } else if (ddd >= 81 && ddd <= 89) {   //Detecta que o ddd é da Região Nordeste
            uf = "Nordeste";
            operadora = detectaBanda(7, prefixo);

        } else if (ddd >= 91 && ddd <= 99) {   //Detecta que o ddd é do Amazonas
            uf = "Amazonas";
            operadora = detectaBanda(8, prefixo);
        }
        else{
            return null;
        }

        Contato c = new Contato(contato.getNome(), contato.getSobrenome(), detectaNonoDigito(contato.getTelefone()), uf, operadora);
        return c;
    }

    public String detectaBanda(int linha, int prefixo) {
        if (prefixo >= 80 && prefixo <= 85) {
            return detectaOperadora(linha, 3);
        } else if (prefixo >= 81 && prefixo <= 88) {
            return detectaOperadora(linha, 2);
        } else if (prefixo >= 91 && prefixo <= 94) {
            return detectaOperadora(linha, 1);
        } else if (prefixo >= 96 && prefixo <= 99) {
            return detectaOperadora(linha, 0);
        } else if (prefixo >= 20 && prefixo < 70) {
            return "Telefone Fixo";
        }
        return null;
    }

    public String detectaOperadora(int linha, int col) {
        return matrixOperadoras[linha][col];
    }

    //----------------------Importando Regras De Negócio Operadoras------------------------------
    
    
    
}
